package com.higgins.client;

import java.util.List;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.higgins.client.dataModel.CoveringLetterDTO;
import com.higgins.client.dataModel.LawFirmDTO;
import com.higgins.client.dataModel.LawFirmTypeDTO;
import com.higgins.client.dataModel.RecipientDTO;
import com.higgins.client.dataModel.RegionDTO;
import com.higgins.client.dataModel.SectorDTO;
import com.higgins.client.dataModel.StrategyDTO;
import com.higgins.client.dataModel.StrategyRecipientCountDTO;
import com.higgins.client.dataModel.StrategyRecipientDTO;

/**
 * The async counterpart of <code>GreetingService</code>.
 */
public interface GreetingServiceAsync {
//	void greetServer(String input, AsyncCallback<String> callback)
//			throws IllegalArgumentException;
	void retrieveStrategys(AsyncCallback<List<StrategyDTO>> callback) throws IllegalArgumentException;
	void updateStrategy(StrategyDTO strategy, AsyncCallback<String> callback) throws IllegalArgumentException;
	void retrieveCoveringLetters(AsyncCallback<List<CoveringLetterDTO>> callback) throws IllegalArgumentException;
	void updateCoveringLetter(CoveringLetterDTO coveringLetterDTO, AsyncCallback<String> callback) throws IllegalArgumentException;

	void retrieveRegions(AsyncCallback<List<RegionDTO>> callback) throws IllegalArgumentException;
	void updateRegion(RegionDTO regionDTO, AsyncCallback<String> callback) throws IllegalArgumentException;

	void retrieveSectors(AsyncCallback<List<SectorDTO>> callback) throws IllegalArgumentException;
	void updateSector(SectorDTO sectorDTO, AsyncCallback<String> callback) throws IllegalArgumentException;

	void retrieveLawFirmTypes(AsyncCallback<List<LawFirmTypeDTO>> callback) throws IllegalArgumentException;
	
	void retrieveLawFirms(AsyncCallback<List<LawFirmDTO>> callback) throws IllegalArgumentException;
	void retrieveLawFirms(SectorDTO sectorDTO, LawFirmTypeDTO lawFirmTypeDTO, AsyncCallback<List<LawFirmDTO>> callback) throws IllegalArgumentException;
	void updateLawFirm(LawFirmDTO lawFirmDTO, AsyncCallback<String> callback) throws IllegalArgumentException;
	
	void retrieveRecipients(RegionDTO regionDTO, SectorDTO sectorDTO, AsyncCallback<List<RecipientDTO>> callback) throws IllegalArgumentException;
	void retrieveRecipients(StrategyDTO strategyDTO, AsyncCallback<List<RecipientDTO>> callback) throws IllegalArgumentException;
	void updateRecipient(RecipientDTO recipientDTO, AsyncCallback<String> callback) throws IllegalArgumentException;

	void setStrategyRecipient(StrategyRecipientDTO strategyRecipient, AsyncCallback<String> callback) throws IllegalArgumentException;
	void removeStrategyRecipient(StrategyRecipientDTO strategyRecipient, AsyncCallback<String> callback) throws IllegalArgumentException;
	void retrieveStrategyRecipients(Long strategyId, Long regionId, Long sectorId, AsyncCallback<List<StrategyRecipientDTO>> callback) throws IllegalArgumentException;

	void retrieveStrategyRecipientCount(Long strategyId, AsyncCallback<StrategyRecipientCountDTO> callback) throws IllegalArgumentException;
	void publishStrategy(Long strategyId, AsyncCallback<String> callback) throws IllegalArgumentException;
	void unpublishStrategy(Long strategyId, AsyncCallback<String> callback) throws IllegalArgumentException;
	void retrieveLawFirmUnavailableStatus(RecipientDTO dto, AsyncCallback<Long> callback) throws IllegalArgumentException;
}
